# 列表（list）：有序的（插入顺序），不唯一的序列结构

# 列表的定义
words = ["python", "hadoop", "java", "hive"]

print(words, type(words))

# 追加新的元素
words.append("spark")

print(words)

# 删除元素
# remove: 通过元素值删除元素
words.remove("hive")
print(words)

# del:通过下标删除元素
del words[1]
print(words)

# 删除最后一个元素
del words[-1]
print(words)

print("=" * 100)

# pop: 从末尾取出一个元素
value = words.pop()

print(value)
print(words)

print("=" * 100)

words = ["python", "hadoop", "java", "hive"]

print(words)

# insert : 指定下标插入元素

words.insert(2, "大数据")

print(words)

print("=" * 100)

# 列表的索引（index）,可以用过索引获取元素，以及删除元素
# 从左往右是0到n-1
# 从右往左-1到-n
words = ["python", "hadoop", "java", "hive"]
print(words)

# 通过下标获取元素
print(words[-1])
print(words[0])

print(words)

# 获取列表中元素的个数
length = len(words)

print(length)

# 列表的切片
# 语法： 列表名称[开始的下标:结束的下标:步长]
# 含头不含尾，步长默认1，下标可以使用负下标

ints = [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(ints[2:7])  # [3, 4, 5, 6, 7]
print(ints[-7:-2])  # [3, 4, 5, 6, 7]
print(ints[2:-2])  # [3, 4, 5, 6, 7]

print(ints[2:9])
# 如果开始下标不写，从头截取，如果结束下标不写，截取到末尾
print(ints[2:])
# 复制列表
print(ints[:])

# 步长：走几步取一个
# 步长尾正时，从左往右截取
print(ints[2::2])  # [3, 5, 7, 9]
print(ints[::2])  # [1, 3, 5, 7, 9]

# 步长尾负数时，从右往左截取
# 步长尾负数时，开始的下标从右边开始
print(ints[::-1])  # 反转列表,返回一个新的列表

print(ints[-3:1:-1])  # [7, 6, 5, 4, 3]

# 反转列表
# reverse： 将原列表反转
ints.reverse()
print(ints)

# 嵌套列表

lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
print(lists)
print(lists[1])  # [4, 5, 6]
print(lists[1][1])  # 5
